package com.synjones.util;

import android.content.Context;
import android.graphics.Point;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;

public class ScreenUtils {
    /**
     * 得到屏幕的物理尺寸，由于该尺寸是在出厂时，厂商写死的，所以仅供参考
     * 计算方法：获取到屏幕的分辨率:point.x和point.y，再取出屏幕的DPI（每英寸的像素数量），
     * 计算长和宽有多少英寸，即：point.x / dm.xdpi，point.y / dm.ydpi，屏幕的长和宽算出来了，
     * 再用勾股定理，计算出斜角边的长度，即屏幕尺寸。
     * @param context
     * @return
     */
    public static double getPhysicsScreenSize(Context context){
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int densityDpi = dm.densityDpi; //得到屏幕的密度值，但是该密度值只能作为参考，因为他是固定的几个密度值
        double x = Math.pow(point.x / dm.xdpi, 2); //dm.xdpi是屏幕x方向的真实密度值，比上面的densityDpi真实
        double y = Math.pow(point.y / dm.ydpi, 2); //dm.xdpi是屏幕y方向的真实密度值，比上面的densityDpi真实
        double screenInches = Math.sqrt(x + y);
        return screenInches;
    }
    public static double getScreenInches(Context context) {
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int densityDpi = dm.densityDpi; //得到屏幕的密度值，但是该密度值只能作为参考，因为他是固定的几个密度值
        double x = Math.pow(point.x / dm.xdpi, 2); //dm.xdpi是屏幕x方向的真实密度值，比上面的densityDpi真实
        double y = Math.pow(point.y / dm.ydpi, 2); //dm.xdpi是屏幕y方向的真实密度值，比上面的densityDpi真实
        double screenInches = Math.sqrt(x + y);
        return screenInches;
    }
    public static double getScreenXInches(Context context) {
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int densityDpi = dm.densityDpi; //得到屏幕的密度值，但是该密度值只能作为参考，因为他是固定的几个密度值。
        double x = point.x / dm.xdpi; //dm.xdpi是屏幕x方向的真实密度值，比上面的densityDpi真实。
        return  x;
    }
    public static double getScreenYInches(Context context) {
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        manager.getDefaultDisplay().getRealSize(point);
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int densityDpi = dm.densityDpi; //得到屏幕的密度值，但是该密度值只能作为参考，因为他是固定的几个密度值。
        double y = point.y / dm.ydpi; //dm.ydpi是屏幕y方向的真实密度值，比上面的densityDpi真实。
        return  y;
    }

    private void printScreenInfo(Context context){
        String tag = "screen";
        int sw = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
        int sh = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();

        DisplayMetrics dm = new DisplayMetrics();
        dm = context.getResources().getDisplayMetrics();
        Log.e(tag, "w -> " + sw + ", h -> " + sh);
        float density  = dm.density;		// 屏幕密度（像素比例：0.75/1.0/1.5/2.0）
        int densityDPI = dm.densityDpi;		// 屏幕密度（每寸像素：120/160/240/320）
        float xdpi = dm.xdpi;
        float ydpi = dm.ydpi;


        int screenWidth  = dm.widthPixels;		// 屏幕宽（像素，如：480px）
        int screenHeight = dm.heightPixels;		// 屏幕高（像素，如：800px）
        Log.e(tag, "screenWidth-> " + sw + ", screenHeight -> " + sh);
        dm = new DisplayMetrics();
        ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);

        density  = dm.density;		// 屏幕密度（像素比例：0.75/1.0/1.5/2.0）
        densityDPI = dm.densityDpi;		// 屏幕密度（每寸像素：120/160/240/320）
        xdpi = dm.xdpi;
        ydpi = dm.ydpi;

        Log.e(tag + "  DisplayMetrics", "xdpi=" + xdpi + "; ydpi=" + ydpi);
        Log.e(tag + "  DisplayMetrics", "density=" + density + "; densityDPI=" + densityDPI);

        int screenWidthDip = dm.widthPixels;		// 屏幕宽（dip，如：320dip）
        int screenHeightDip = dm.heightPixels;		// 屏幕宽（dip，如：533dip）

        Log.e(tag + " DisplayMetrics", "screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);

        screenWidth  = (int)(dm.widthPixels * density + 0.5f);		// 屏幕宽（px，如：480px）
        screenHeight = (int)(dm.heightPixels * density + 0.5f);		// 屏幕高（px，如：800px）

        Log.e(tag + " DisplayMetrics", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);

    }
}
